package br.uniceub.fsw.agenda.controller;

import br.uniceub.fsw.agenda.exception.BusinessException;
import br.uniceub.fsw.agenda.exception.DatabaseException;
import br.uniceub.fsw.agenda.model.vo.MenuVO;
import br.uniceub.fsw.agenda.model.vo.PessoaVO;
import br.uniceub.fsw.agenda.model.vo.TipoTelefoneVO;
import br.uniceub.fsw.agenda.model.vo.TipoLogradouroVO;
import br.uniceub.fsw.agenda.model.vo.UFVO;
import br.uniceub.fsw.agenda.model.vo.CidadeVO;
import br.uniceub.fsw.agenda.model.vo.BairroVO;
import br.uniceub.fsw.agenda.model.vo.LogradouroVO;
import br.uniceub.fsw.agenda.model.vo.TelefoneVO;
import br.uniceub.fsw.agenda.model.vo.PessoaTelefoneVO;
import br.uniceub.fsw.agenda.model.facade.ManterPessoaFacade;
import br.uniceub.fsw.agenda.util.HttpRequestWithModifiableParameters;
import br.uniceub.fsw.agenda.util.NumberUtils;
import java.io.*;
import java.net.*;

import java.util.List;
import javax.servlet.*;
import javax.servlet.http.*;

/**
 *
 * @author Bruno
 */
public class ManterPessoaController extends GenericServlet {
    private String nomeTela = "/manterPessoa/manterPessoa.jsp";
    public void iniciarTela(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Integer idPessoa = NumberUtils.toInteger(request.getParameter("idPessoa"));
        String sgUf = request.getParameter("sgUf");
        Integer idCidade = NumberUtils.toInteger(request.getParameter("idCidade"));
        
        //Facades
        ManterPessoaFacade facadePessoa = new ManterPessoaFacade();
        
        //passar um wrapper no lugar do verdadeiro request para alterar valores
        HttpRequestWithModifiableParameters wrapper = new HttpRequestWithModifiableParameters(request);

        // Controle necessário para os controles que são desabilitados na página
        Integer nrCep = null;
        Long nrTelefone = null;
        Integer idTipoTelefone = null;
        
        if(request.getParameter("nrCep") == null) {
            nrCep = NumberUtils.toInteger(request.getParameter("nrCepHidden"));
            if(nrCep != null) {
                wrapper.setParameter("nrCep", nrCep.toString());
            }
        }
        if(request.getParameter("nrTelefone") == null) {
            nrTelefone = NumberUtils.toLong(request.getParameter("nrTelefoneHidden"));
            if(nrTelefone != null) {
                wrapper.setParameter("nrTelefone", nrTelefone.toString());
            }
        }
        if(request.getParameter("idTipoTelefone") == null) {
            idTipoTelefone = NumberUtils.toInteger(request.getParameter("idTipoTelefoneHidden"));
            if(idTipoTelefone != null) {
                wrapper.setParameter("idTipoTelefone", idTipoTelefone.toString());
            }
        }
        
        try {
            //buscar lista de menus
            List<MenuVO> listaMenu = facadePessoa.findAllMenu();
            wrapper.setAttribute("listaDeMenu", listaMenu);
            
            List<UFVO> listaUF = facadePessoa.findAllUF();
            wrapper.setAttribute("listaDeUF", listaUF);

            List<CidadeVO> listaCidade = facadePessoa.findAllCidade(sgUf);
            wrapper.setAttribute("listaDeCidade", listaCidade);

            List<BairroVO> listaBairro = facadePessoa.findAllBairro(idCidade);
            wrapper.setAttribute("listaDeBairro", listaBairro);

            List<TipoLogradouroVO> listaTipoLogradouro = facadePessoa.findAllTipoLogradouro();
            wrapper.setAttribute("listaDeTipoLogradouro", listaTipoLogradouro);

            List<TipoTelefoneVO> listaTipoTelefone = facadePessoa.findAllTipoTelefone();
            wrapper.setAttribute("listaDeTipoTelefone", listaTipoTelefone);

            List<PessoaTelefoneVO> listaPessoaTelefone = facadePessoa.findAllPessoaTelefone(idPessoa);
            wrapper.setAttribute("listaDePessoaTelefone", listaPessoaTelefone);
        } catch (BusinessException ex) {          
            wrapper.setAttribute("mensagem", ex.getMessage());
        } catch (DatabaseException ex) {            
            wrapper.setAttribute("mensagem", "Erro de comunicação com o banco de dados.");
        }        
        RequestDispatcher rd = request.getRequestDispatcher(nomeTela);
        rd.forward(wrapper, response);        
    }
    
    public void consultarTelefone(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //pegar parametros da tela
        Long nrTelefone = NumberUtils.toLong(request.getParameter("nrTelefone"));
        
        ManterPessoaFacade facadePessoa = new ManterPessoaFacade();
        
        //passar um wrapper no lugar do verdadeiro request para alterar valores
        HttpRequestWithModifiableParameters wrapper = new HttpRequestWithModifiableParameters(request);

        try {
            TelefoneVO telefone = facadePessoa.findTelefoneByNumero(nrTelefone);
            
            if(telefone != null && telefone.getIdTelefone() != null) {
                wrapper.setParameter("idTipoTelefone", telefone.getTipoTelefone().getIdTipoTelefone().toString());
                wrapper.setParameter("idTelefone", telefone.getIdTelefone().toString());
                wrapper.setParameter("nrTelefone", telefone.getNrTelefone().toString());
            } else {
                wrapper.setParameter("idTelefone", "");
            }
        } catch (BusinessException ex) {
            request.setAttribute("mensagem", ex.getMessage());
        } catch (DatabaseException ex) {
            request.setAttribute("mensagem", "Erro de comunicação com o banco de dados.");
        }

        iniciarTela(wrapper, response);
    }
    
    public void limparTelefone(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //passar um wrapper no lugar do verdadeiro request para alterar valores
        HttpRequestWithModifiableParameters wrapper = new HttpRequestWithModifiableParameters(request);

        wrapper.setParameter("idTelefone", "");
        wrapper.setParameter("nrTelefone", "");

        iniciarTela(wrapper, response);
    }
    
    public void incluirTelefone(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Integer idTipoTelefone = NumberUtils.toInteger(request.getParameter("idTipoTelefone"));
        if(idTipoTelefone == null) {
            idTipoTelefone = NumberUtils.toInteger(request.getParameter("idTipoTelefoneHidden"));
        }
        Long nrTelefone = NumberUtils.toLong(request.getParameter("nrTelefoneHidden"));
        Integer idPessoa = NumberUtils.toInteger(request.getParameter("idPessoa"));
        Integer idTelefone = NumberUtils.toInteger(request.getParameter("idTelefone"));
        
        ManterPessoaFacade facadePessoa = new ManterPessoaFacade();
        
        //passar um wrapper no lugar do verdadeiro request para alterar valores
        HttpRequestWithModifiableParameters wrapper = new HttpRequestWithModifiableParameters(request);

        try {
            TelefoneVO telefone = new TelefoneVO();
            
            if(idTelefone == null) {
                telefone.setNrTelefone(nrTelefone);

                TipoTelefoneVO tipoTelefone = new TipoTelefoneVO();

                tipoTelefone.setIdTipoTelefone(idTipoTelefone);

                telefone.setTipoTelefone(tipoTelefone);

                idTelefone = facadePessoa.inserirTelefone(telefone);

                telefone.setIdTelefone(idTelefone);
            } else {
                telefone = facadePessoa.findTelefoneByNumero(nrTelefone);
            }
            
            PessoaTelefoneVO pessoaTelefone = new PessoaTelefoneVO();
            
            PessoaVO pessoa = facadePessoa.findPessoaById(idPessoa);
            
            pessoaTelefone.setPessoa(pessoa);
            pessoaTelefone.setTelefone(telefone);
            
            facadePessoa.inserirPessoaTelefone(pessoaTelefone);
        } catch (BusinessException ex) {
            request.setAttribute("mensagem", ex.getMessage());
        } catch (DatabaseException ex) {
            request.setAttribute("mensagem", "Erro de comunicação com o banco de dados.");
        }
        
        wrapper.setParameter("idTelefone", "");
        wrapper.setParameter("nrTelefone", "");
        wrapper.setParameter("idTipoTelefone", "");

        iniciarTela(wrapper, response);
    }
    
    public void excluirTelefone(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //pegar parametros da tela
        Integer idPessoa = NumberUtils.toInteger(request.getParameter("idPessoa"));
        Integer idTelefone = NumberUtils.toInteger(request.getParameter("idTelefone"));
        
        //facade
        ManterPessoaFacade facadePessoa = new ManterPessoaFacade();
        
        //passar um wrapper no lugar do verdadeiro request para alterar valores
        HttpRequestWithModifiableParameters wrapper = new HttpRequestWithModifiableParameters(request);
        
        try {
            PessoaTelefoneVO pessoaTelefone = new PessoaTelefoneVO();
            PessoaVO pessoa = new PessoaVO();
            pessoa.setIdPessoa(idPessoa);
            TelefoneVO telefone = new TelefoneVO();
            telefone.setIdTelefone(idTelefone);
            pessoaTelefone.setPessoa(pessoa);
            pessoaTelefone.setTelefone(telefone);
            facadePessoa.excluirPessoaTelefone(pessoaTelefone);
                        
            wrapper.setParameter("idTelefone", "");
            wrapper.setParameter("nrTelefone", "");
        } catch (BusinessException ex) {
             request.setAttribute("mensagem", ex.getMessage());
        } catch (DatabaseException ex) {
             request.setAttribute("mensagem", "Erro de comunicação com o banco de dados.");
        }        
        
        iniciarTela(wrapper, response);
    }

    public void consultarCep(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //pegar parametros da tela
        Integer nrCep = NumberUtils.toInteger(request.getParameter("nrCep"));
        
        ManterPessoaFacade facadePessoa = new ManterPessoaFacade();
        
        //passar um wrapper no lugar do verdadeiro request para alterar valores
        HttpRequestWithModifiableParameters wrapper = new HttpRequestWithModifiableParameters(request);

        try {
            LogradouroVO logradouro = facadePessoa.findLogradouroByCep(nrCep);
            
            if(logradouro != null && logradouro.getIdLogradouro() != null) {
                wrapper.setParameter("idLogradouro", logradouro.getIdLogradouro().toString());
                wrapper.setParameter("nrCep", logradouro.getNrCep().toString());
                wrapper.setParameter("idTipoLogradouro", logradouro.getTipoLogradouro().getIdTipoLogradouro().toString());
                wrapper.setParameter("dsLogradouro", logradouro.getDsLogradouro());
                wrapper.setParameter("idBairro", logradouro.getBairro().getIdBairro().toString());
                wrapper.setParameter("idCidade", logradouro.getCidade().getIdCidade().toString());
                wrapper.setParameter("sgUf", logradouro.getCidade().getUf().getSgUf());
            } else {
                wrapper.setParameter("idLogradouro", "");
                wrapper.setParameter("idTipoLogradouro", "");
                wrapper.setParameter("dsLogradouro", "");
                wrapper.setParameter("idBairro", "");
                wrapper.setParameter("idCidade", "");
                wrapper.setParameter("sgUf", "");
            }
        } catch (BusinessException ex) {          
            request.setAttribute("mensagem", ex.getMessage());
        } catch (DatabaseException ex) {            
            request.setAttribute("mensagem", "Erro de comunicação com o banco de dados.");
        }

        iniciarTela(wrapper, response);
    }
    
    public void limparCep(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //passar um wrapper no lugar do verdadeiro request para alterar valores
        HttpRequestWithModifiableParameters wrapper = new HttpRequestWithModifiableParameters(request);

        wrapper.setParameter("idLogradouro", "");
        wrapper.setParameter("nrCep", "");
        wrapper.setParameter("idTipoLogradouro", "");
        wrapper.setParameter("dsLogradouro", "");
        wrapper.setParameter("idBairro", "");
        wrapper.setParameter("idCidade", "");
        wrapper.setParameter("sgUf", "");

        iniciarTela(wrapper, response);
    }
    
    public void inserir(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //pegar parametros da tela
        String noPessoa = request.getParameter("noPessoa");
        Long nrCpf = NumberUtils.toLong(request.getParameter("nrCpf"));
        Integer idLogradouro = NumberUtils.toInteger(request.getParameter("idLogradouro"));
        String dsComplemento = request.getParameter("dsComplemento");
        Integer nrNumero = NumberUtils.toInteger(request.getParameter("nrNumero"));

        //facade
        ManterPessoaFacade facade = new ManterPessoaFacade();
        
        Integer idTipoLogradouro = NumberUtils.toInteger(request.getParameter("idTipoLogradouro"));
        Integer idBairro = NumberUtils.toInteger(request.getParameter("idBairro"));
        Integer idCidade = NumberUtils.toInteger(request.getParameter("idCidade"));
        String dsLogradouro = request.getParameter("dsLogradouro");
        Integer nrCep = NumberUtils.toInteger(request.getParameter("nrCepHidden"));
        if(idLogradouro == null &&
           idTipoLogradouro != null &&
           idBairro != null &&
           idCidade != null &&
           dsLogradouro != null ) {
            try {
                LogradouroVO logradouro = new LogradouroVO();
                TipoLogradouroVO tipoLogradouro = new TipoLogradouroVO();
                BairroVO bairro = new BairroVO();
                CidadeVO cidade = new CidadeVO();

                bairro.setIdBairro(idBairro);
                cidade.setIdCidade(idCidade);
                tipoLogradouro.setIdTipoLogradouro(idTipoLogradouro);

                logradouro.setBairro(bairro);
                logradouro.setCidade(cidade);
                logradouro.setTipoLogradouro(tipoLogradouro);
                logradouro.setDsLogradouro(dsLogradouro);
                logradouro.setNrCep(nrCep);

                idLogradouro = facade.inserirLogradouro(logradouro);
            } catch (BusinessException ex) {
                 request.setAttribute("mensagem", ex.getMessage());
            } catch (DatabaseException ex) {
                 request.setAttribute("mensagem", "Erro de comunicação com o banco de dados.");
            }        
        }
        
        //montar entidade que sera gravada
        PessoaVO pessoa = new PessoaVO();
        pessoa.setNoPessoa(noPessoa);
        pessoa.setNrCpf(nrCpf);
        pessoa.setDsComplemento(dsComplemento);
        pessoa.setNrNumero(nrNumero);

        LogradouroVO logradouro = new LogradouroVO();

        logradouro.setIdLogradouro(idLogradouro);

        pessoa.setLogradouro(logradouro);
        
        //passar um wrapper no lugar do verdadeiro request para alterar valores
        HttpRequestWithModifiableParameters wrapper = new HttpRequestWithModifiableParameters(request);
        
        try {
            facade.inserirPessoa(pessoa);
                        
            wrapper.setParameter("idPessoa", "");
            wrapper.setParameter("noPessoa", "");
            wrapper.setParameter("nrCpf", "");
            wrapper.setParameter("nrCep", "");
            wrapper.setParameter("idTipoLogradouro", "");
            wrapper.setParameter("idLogradouro", "");
            wrapper.setParameter("dsLogradouro", "");
            wrapper.setParameter("idBairro", "");
            wrapper.setParameter("idCidade", "");
            wrapper.setParameter("sgUf", "");
            wrapper.setParameter("dsComplemento", "");
            wrapper.setParameter("nrNumero", "");
        } catch (BusinessException ex) {
             request.setAttribute("mensagem", ex.getMessage());
        } catch (DatabaseException ex) {
             request.setAttribute("mensagem", "Erro de comunicação com o banco de dados.");
        }        
        
        iniciarTela(wrapper, response);
    }

    public void consultar(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //pegar parametros da tela
        Integer idPessoa = NumberUtils.toInteger(request.getParameter("idPessoa"));
        
        //facade
        ManterPessoaFacade facadePessoa = new ManterPessoaFacade();
        
        //passar um wrapper no lugar do verdadeiro request para alterar valores
        HttpRequestWithModifiableParameters wrapper = new HttpRequestWithModifiableParameters(request);

        try {
            //buscar lista de menus
            List<MenuVO> listaMenu = facadePessoa.findAllMenu();
            request.setAttribute("listaDeMenu", listaMenu);
            
            List<TipoLogradouroVO> listaTipoLogradouro = facadePessoa.findAllTipoLogradouro();
            request.setAttribute("listaDeTipoLogradouro", listaTipoLogradouro);

            List<UFVO> listaUF = facadePessoa.findAllUF();
            request.setAttribute("listaDeUF", listaUF);

            List<CidadeVO> listaCidade = facadePessoa.findAllCidade();
            request.setAttribute("listaDeCidade", listaCidade);

            List<BairroVO> listaBairro = facadePessoa.findAllBairro();
            request.setAttribute("listaDeBairro", listaBairro);

            List<TipoTelefoneVO> listaTipoTelefone = facadePessoa.findAllTipoTelefone();
            request.setAttribute("listaDeTipoTelefone", listaTipoTelefone);

            PessoaVO pessoa = facadePessoa.findPessoaById(idPessoa);
            
            wrapper.setParameter("idPessoa", pessoa.getIdPessoa().toString());
            wrapper.setParameter("noPessoa", pessoa.getNoPessoa());
            wrapper.setParameter("nrCpf", pessoa.getNrCpf().toString());
            
            if(pessoa.getLogradouro() != null && pessoa.getLogradouro().getNrCep() != null) {
                wrapper.setParameter("nrCep", pessoa.getLogradouro().getNrCep().toString());
            }
            
            if(pessoa.getLogradouro() != null && pessoa.getLogradouro().getIdLogradouro() != null) {
                wrapper.setParameter("idLogradouro", pessoa.getLogradouro().getIdLogradouro().toString());
            }
            
            if(pessoa.getLogradouro() != null &&
                    pessoa.getLogradouro().getTipoLogradouro() != null &&
                    pessoa.getLogradouro().getTipoLogradouro().getIdTipoLogradouro() != null) {
                wrapper.setParameter("idTipoLogradouro", pessoa.getLogradouro().getTipoLogradouro().getIdTipoLogradouro().toString());
            }
            
            if(pessoa.getLogradouro() != null) {
                wrapper.setParameter("dsLogradouro", pessoa.getLogradouro().getDsLogradouro());
            }
        
            if(pessoa.getLogradouro() != null && pessoa.getLogradouro().getBairro() != null) {
                wrapper.setParameter("idBairro", pessoa.getLogradouro().getBairro().getIdBairro().toString());
            }
        
            if(pessoa.getLogradouro() != null &&
                    pessoa.getLogradouro().getCidade() != null &&
                    pessoa.getLogradouro().getCidade().getIdCidade() != null) {
                wrapper.setParameter("idCidade", pessoa.getLogradouro().getCidade().getIdCidade().toString());
            }

            if(pessoa.getLogradouro() != null &&
                    pessoa.getLogradouro().getCidade() != null &&
                    pessoa.getLogradouro().getCidade().getUf() != null) {
                wrapper.setParameter("sgUf", pessoa.getLogradouro().getCidade().getUf().getSgUf());
            }
            
            wrapper.setParameter("dsComplemento", pessoa.getDsComplemento());
            
            if(pessoa.getNrNumero() != null) {
                wrapper.setParameter("nrNumero", pessoa.getNrNumero().toString());
            }
        } catch (BusinessException ex) {          
            request.setAttribute("mensagem", ex.getMessage());
        } catch (DatabaseException ex) {            
            request.setAttribute("mensagem", "Erro de comunicação com o banco de dados.");
        }        

        iniciarTela(wrapper, response);        
    }

    public void alterar(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //pegar parametros da tela
        Integer idPessoa = NumberUtils.toInteger(request.getParameter("idPessoa"));
        String noPessoa = request.getParameter("noPessoa");
        Long nrCpf = NumberUtils.toLong(request.getParameter("nrCpf"));
        Integer idLogradouro = NumberUtils.toInteger(request.getParameter("idLogradouro"));
        String dsComplemento = request.getParameter("dsComplemento");
        Integer nrNumero = NumberUtils.toInteger(request.getParameter("nrNumero"));

        //facade
        ManterPessoaFacade facade = new ManterPessoaFacade();
        
        Integer idTipoLogradouro = NumberUtils.toInteger(request.getParameter("idTipoLogradouro"));
        Integer idBairro = NumberUtils.toInteger(request.getParameter("idBairro"));
        Integer idCidade = NumberUtils.toInteger(request.getParameter("idCidade"));
        String dsLogradouro = request.getParameter("dsLogradouro");
        Integer nrCep = NumberUtils.toInteger(request.getParameter("nrCepHidden"));
        if(idLogradouro == null &&
           idTipoLogradouro != null &&
           idCidade != null &&
           dsLogradouro != null ) {
            try {
                LogradouroVO logradouro = new LogradouroVO();
                BairroVO bairro = new BairroVO();
                CidadeVO cidade = new CidadeVO();
                TipoLogradouroVO tipoLogradouro = new TipoLogradouroVO();
                
                bairro.setIdBairro(idBairro);
                cidade.setIdCidade(idCidade);
                tipoLogradouro.setIdTipoLogradouro(idTipoLogradouro);
                
                logradouro.setBairro(bairro);
                logradouro.setCidade(cidade);
                logradouro.setTipoLogradouro(tipoLogradouro);

                logradouro.setDsLogradouro(dsLogradouro);
                logradouro.setNrCep(nrCep);

                idLogradouro = facade.inserirLogradouro(logradouro);
            } catch (BusinessException ex) {
                 request.setAttribute("mensagem", ex.getMessage());
            } catch (DatabaseException ex) {
                 request.setAttribute("mensagem", "Erro de comunicação com o banco de dados.");
            }        
        }
        
        //montar entidade que sera gravada
        PessoaVO pessoa = new PessoaVO();
        pessoa.setIdPessoa(idPessoa);
        pessoa.setNoPessoa(noPessoa);
        pessoa.setNrCpf(nrCpf);
        pessoa.setDsComplemento(dsComplemento);
        pessoa.setNrNumero(nrNumero);

        LogradouroVO logradouro = null;

        try {
            logradouro = facade.findLogradouroById(idLogradouro);
        } catch (BusinessException ex) {
             request.setAttribute("mensagem", ex.getMessage());
        } catch (DatabaseException ex) {
             request.setAttribute("mensagem", "Erro de comunicação com o banco de dados.");
        }        

        pessoa.setLogradouro(logradouro);
        
        //passar um wrapper no lugar do verdadeiro request para alterar valores
        HttpRequestWithModifiableParameters wrapper = new HttpRequestWithModifiableParameters(request);
        
        try {
            facade.alterarPessoa(pessoa);
        } catch (BusinessException ex) {
             request.setAttribute("mensagem", ex.getMessage());
        } catch (DatabaseException ex) {
             request.setAttribute("mensagem", "Erro de comunicação com o banco de dados.");
        }        
        
        // campos disabled que precisam ser repassados
        wrapper.setParameter("sgUf", pessoa.getLogradouro().getCidade().getUf().getSgUf());
        wrapper.setParameter("idCidade", pessoa.getLogradouro().getCidade().getIdCidade().toString());
        wrapper.setParameter("idBairro", pessoa.getLogradouro().getBairro().getIdBairro().toString());
        wrapper.setParameter("idTipoLogradouro", pessoa.getLogradouro().getTipoLogradouro().getIdTipoLogradouro().toString());
        wrapper.setParameter("dsLogradouro", pessoa.getLogradouro().getDsLogradouro());
        wrapper.setParameter("nrCep", pessoa.getLogradouro().getNrCep().toString());
        
        iniciarTela(wrapper, response);
    }

    public void excluir(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //pegar parametros da tela
        Integer idPessoa = NumberUtils.toInteger(request.getParameter("idPessoa"));
        
        //facade
        ManterPessoaFacade facadePessoa = new ManterPessoaFacade();
        
        //passar um wrapper no lugar do verdadeiro request para alterar valores
        HttpRequestWithModifiableParameters wrapper = new HttpRequestWithModifiableParameters(request);
        
        try {
            facadePessoa.excluirPessoa(idPessoa);
                        
            wrapper.setParameter("idPessoa", "");
            wrapper.setParameter("noPessoa", "");
            wrapper.setParameter("nrCpf", "");
            wrapper.setParameter("nrCep", "");
            wrapper.setParameter("idTipoLogradouro", "");
            wrapper.setParameter("idLogradouro", "");
            wrapper.setParameter("dsLogradouro", "");
            wrapper.setParameter("idBairro", "");
            wrapper.setParameter("idCidade", "");
            wrapper.setParameter("sgUf", "");
            wrapper.setParameter("dsComplemento", "");
            wrapper.setParameter("nrNumero", "");
        } catch (BusinessException ex) {
             request.setAttribute("mensagem", ex.getMessage());
        } catch (DatabaseException ex) {
             request.setAttribute("mensagem", "Erro de comunicação com o banco de dados.");
        }        
        
        iniciarTela(wrapper, response);
    }

    public void limpar(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //passar um wrapper no lugar do verdadeiro request para alterar valores
        HttpRequestWithModifiableParameters wrapper = new HttpRequestWithModifiableParameters(request);
        
        wrapper.setParameter("idPessoa", "");
        wrapper.setParameter("noPessoa", "");
        wrapper.setParameter("nrCpf", "");
        wrapper.setParameter("nrCep", "");
        wrapper.setParameter("idTipoLogradouro", "");
        wrapper.setParameter("idLogradouro", "");
        wrapper.setParameter("dsLogradouro", "");
        wrapper.setParameter("idBairro", "");
        wrapper.setParameter("idCidade", "");
        wrapper.setParameter("sgUf", "");
        wrapper.setParameter("dsComplemento", "");
        wrapper.setParameter("nrNumero", "");
        
        iniciarTela(wrapper, response);
    }

}